import java.util.Random;
import java.util.Scanner;

/**
 * @ClassName Test
 * @Description Java SE-逻辑控制
 * @Author 李明忠
 * @Date 2025/4/21 20:53
 * @Version 1.0
 */
@SuppressWarnings("all")
public class Test {
    /**
     * 猜数字游戏
     * @param args
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random random = new Random();//默认随机数种子是系统时间
        int gameNum = random.nextInt(101);//随机产生一个1-100的数
        System.out.println(gameNum);
        int num = 10;//只能猜10次
        while(num > 0){//如果你的游戏次数还大于0就可以继续玩
            System.out.println("请输入你所要猜的数字(1-100)：");
            int temp = sc.nextInt();
            if(temp >=1 && temp <=100){//如果你输入的数字合法就往下走
                if(temp == gameNum){
                    System.out.println("恭喜你，猜对了");
                    break;//猜对了就结束游戏
                }else if(temp < gameNum){
                    System.out.println("猜小了");
                    num--;
                    System.out.println("你还有" + num + "次机会");
                }else{
                    System.out.println("猜大了");
                    num--;
                    System.out.println("你还有" + num + "次机会");
                }
            }else{
                System.out.println("输入的数字不合法！！！请重新输入");
            }
        }
        if(num > 0){
            System.out.println("游戏胜利");//如果10次内完成就胜利
        }else{
            System.out.println("游戏失败");//如果10次机会用完了就失败
        }
    }
    /**
     * 输入语句的练习
     * @param args
     */
    public static void main6(String[] args) {
        //使用 Scanner 循环读取 N 个数字，并求取其平均值
        Scanner sc = new Scanner(System.in);
        int sum = 0;//存放数之和
        int num = 0;//记录输入个数
        /*
         *解释为什么使用while和循环条件hasNext()
         * 1)首先循环次数不确定因此使用while循环
         * 2)由于循环读入N次他是不确定你到底输入几次的因此使用hasNect()
         * hasNext()的原理：
         *          他会配合sc.nextInt()进行用户交互等待用户输入
         *          如果用户输入后回车他就进行检测如果有数据他就返回true
         *          如果用户输入：ctrl+D ==》停止输入 hasNext()返回false然后退出循环
         * 可以说如果循环输入次数未知：就使用while==》自然就使用hasNext()做条件
         */
        while(sc.hasNext()){//用户是否有数据输入
            int temp = sc.nextInt();//输入一个整数
            sum += temp;//求和
            num++;//输入的数增加
        }
        System.out.println("输入的数的个数：" + num);
        System.out.println("平均值：" + 1.0*sum/num);

        /*
        * 测试用例：1 2 3 4 5
        * 结果：
        * 输入的数的个数：  5
        * 平均值： 3.0
        * */

//使用 Scanner 读取字符串/整数/浮点数
//        //读取字符串
//        //sc.next()-->以空格结束
//        //sc.nextLine()-->读一行以回车结束
//        String userName = sc.nextLine();
//
//        //读入整数
//        int age = sc.nextInt();
//
//        //读入浮点数
//        double height = sc.nextDouble();
//
//        System.out.println("名字" + userName);
//        System.out.println("年龄" + age);
//        System.out.println("身高" + height);


    }
    /**
     * 输入输出
     * @param args
     */
    public static void main5(String[] args) {
        //输出：
        System.out.println("hello word");
        System.out.print("hello ");
        System.out.println("word");

        int x = 10;
        System.out.printf("%d",x);//10

        //输入：
        //第一步：import java.util.Scanner; // 需要导入 util 包
        //第二步：Scanner sc = new Scanner(System.in);
        //第三步：输入整数的语句int num = sc.nextInt();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println(num);
    }
    /**
     * break和continue的使用
     * @param args
     */
    public static void main4(String[] args) {
        //求100-200之间的第一个3的倍数
        System.out.println("=========while实现========");
        int num = 100;
        while(num <= 200){
            if(num % 3 ==0){
                System.out.println(num);
                break;
            }
            num++;
        }
        //结果：102
        System.out.println("========for实现========");

        for(int i = 100;i <= 200; i++){
            if(i % 3 ==0){
                System.out.println(i);
                break;
            }
        }

        System.out.println("=======do whiel实现============");
        int num1 = 100;
        do{
            if(num1 % 3 == 0){
                System.out.println(num1);
                break;
            }
            num1++;
        } while(num1 <= 200);

        //找出100-200之间的所有3的倍数
//        int i = 100;
//        while(i <= 200){
//            if(i % 3 != 0){//如果你不是3的倍数那么我就不输出
//                i++;//使用continue就必须在continue前面写更新表达式否则陷入死循环
//                continue;
//            }
//            System.out.println(i + " ");//如果你是3的倍数我就输出
//            i++;
//        }
        //找出100-200之间的所有3的倍数
        System.out.println("========for实现=========");
        for (int i = 100;i <= 200;i++){
            if(i % 3 !=0) {//如果你不是3的倍数我就不将你输出
               continue;
            }
            System.out.print(i + " ");//如果你是3的倍数我就将你输出
        }

        System.out.println();
        System.out.println("======while实现=========");
        int i = 100;
        while(i <= 200){
            if(i % 3 != 0){//如果你不是3的倍数我就不将你输出
                i++;
                continue;
            }
            System.out.print(i + " ");//如果你是3的倍数我就将你输出
            i++;
        }

        System.out.println();
        System.out.println("========do while实现==========");
        int num2 = 100;
        do{
            if(num2 % 3 != 0){//如果你不是3的倍数我就不将你输出
                num2++;
                continue;
            }
            System.out.print(num2 + " ");//如果你是3的倍数我就将你输出
            num2++;
        } while(num2 <= 200);
    }
    /**
     * 循环语句
     * @param args
     */
    public static void main3(String[] args) {
        /****************while循环********************/
        /*
        语法：
        while(布尔表达式){
            语句块;
        }
         */

        //打印1到10的数字
        int num = 1;
        while(num <= 10){
            System.out.print(num + " ");
            num++;
        }

        int a = 1;
        while(a < 10){
            System.out.print(a + " ");
            a++;
        }
        /********************for循环********************/
        /*
        * 语法
        * for(初始化语句;布尔表达式;更新表达式){
        *   语句块；
        * }
        * */
        //打印1到10的数字
        for(int i = 1;i <= 10;i++){
            System.out.println(i);
        }
        System.out.println("=====================");

        //练习---for循环的几种写法
        //练习：计算1-100的和

        //1.通用的写法
        int sum = 0;
        for(int i = 1;i <= 100;i++){
            sum += i;
        }
        System.out.println(sum);

        //2.初始化语句写在外面
        int sum1 = 0;
        int i = 1;
        for(;i <= 100;i++){
            sum1 += i;
        }
        System.out.println(sum1);

        //3.更新表达式写在循环体中
        int sum2 = 0;
        for(int j = 1;j <= 100;){
            sum2+=j;
            j++;
        }
        System.out.println(sum2);

        /*****************do while循环***************/
        /*
        * do{
        *   语句块;
        * } while(布尔表达式);
        * */
    }
    public static int fun(int z){
        return z;
    }
    /**
     * 选择语句
     * @param args
     */
    public static void main2(String[] args) {
        /******************if语句基础语法**********************/
        /*
        * 结论：
        * 语法格式1：
        * if（布尔表达式）{
        *   语句块;
        * }
        *
        * 语法格式2：
        * if(布尔表达式){
        *   语句块1;
        * } else{
        *   语句块2;
        * }
        *
        * 语法格式3：
        * if(布尔表达式){
        *   语句块1;
        * } else if(布尔表达式){
        *   语句块2;
        * } else{
        *   语句块3;
        * }
        *
        * 注1：条件只能是boolean表达式
        * 注2：不管多么复杂的语句只会选择一条路走
        * */

        //语法格式1:
        int age = 20;
        if(age >= 18){//如果大于18
            System.out.println("成年");//打印成年
        }

        //语法格式2：
        if(age > 20){
            System.out.println("学习");//学习
        } else{
            System.out.println("实习");
        }

        //语法格式3：
        int score = 100;
        if(score >= 90){
            System.out.println("优秀");//优秀
        }else if(score >= 80 && score < 90){
            System.out.println("良好");
        }else if(score >= 70 && score < 80){
            System.out.println("中等");
        }else if(score >= 60 && score < 70){
            System.out.println("及格");
        }else if(score >= 0 && score < 60){
            System.out.println("不及格");
        }else{
            System.out.println("错误数据");
        }
        //结果：优秀

        //结论:if语句也说明了无论有多少条路你最终只选择一条路走

        //if的注意事项
        //1.括号中的表达式只能是boolean表达式（值为布尔类型的表达式 或者 是布尔值）
//        if(1){
//            System.out.println("1最为条件不可以！！！");
//        }
        //2.无论有多少条路只会选择一条执行
        //3.else的匹配遵循"就近原则"，即else会与最近的、尚未匹配else的if语句配对。
        //3.1.else总是匹配最近的if（如果没有{}明确范围）。
        int a1 = 5;
        int b = 10;
        if (a1 < 0) {//false
            if (b < 5) {
                System.out.println("a1 > 0 且 b > 5");
            }
        }
        else{
            System.out.println("a1 <= 0");
        }
        //3.2.使用{}可以显式控制else的匹配，避免歧义。
        //3.3.嵌套if-else时，建议始终使用{}，提高代码可读性并防止逻辑错误。


        System.out.println("=======================");
        /**************if相关练习********************/
        //1. 判断一个数字是奇数还是偶数
        int n = 13;
        if(n % 2 == 0){
            System.out.println(n + "是偶数");
        }else{
            System.out.println(n + "是奇数");
        }

        //2. 判断一个年份是否为闰年
        int year = 2023;
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ){
            System.out.println(year + "是闰年");
        }else{
            System.out.println(year + "不是闰年");
        }

        System.out.println("========switch========");
        /*******************switch语句基本语法*********************/
        /*
        基本语法：
        switch(表达式){
            case 常量值1：
                //代码块
                break;
            case 常量值2：
                //代码块
                break;
            case 常量值3：
                //代码块
                break;
            ...//可以有多个case
            default:
               //默认情况
               break;
        }
         */
        int day = 7;
        switch(day){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        System.out.println("===========switch注意事项============");
        //switch表达式不可以是float double long boolean
//        float f = 10.0F;
//        switch(f){//编译报错！
//            case 10.0:
//                System.out.println("10.0");
//                break;
//        }
//        double d = 10.0;
//        switch(d){//编译报错！
//            case 10.0:
//                System.out.println("10.0");
//                break;
//        }
//        long l = 10L;
//        switch(l){//编译报错！
//            case 10:
//                System.out.println("10");
//                break;
//        }
//
//        boolean flag = true;
//        switch(flag){//编译报错！
//            case true:
//                System.out.println("true");
//                break;
//            case false:
//                System.out.println("false");
//        }
//
//        int a = 4;
//        switch(a < 3){
//            case true:
//                System.out.println("a<3");
//                break;
//        }
        //switch可以放表达式，变量，函数调用和常量
        //常量
        switch(1){
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            default:
                System.out.println("输入错误");
                break;
        }

        //变量
        int x = 10;
        switch(x){
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            default:
                System.out.println("输入错误");
                break;
        }

        //表达式
        int y = 5;
        switch(y + 1){
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            default:
                System.out.println("输入错误");
                break;
        }

        //函数调用
        int z = 10;
        switch(fun(z)){
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            default:
                System.out.println("输入错误");
                break;
        }

        //case的错误使用
//        int num = 3;
//        switch(num){
//            case1://没有空格
//                System.out.println("1");
//                break;
//            case 2:
//                System.out.println("2");
//                break;
//            case 3:
//                System.out.println("3");
//                break;
//            default:
//                System.out.println("输入错误");
//                break;
//        }

//        int num = 3;
//        switch(num){
//            case 1 //没有冒号
//            System.out.println("1");
//            break;
//            case 2:
//                System.out.println("2");
//                break;
//            case 3:
//                System.out.println("3");
//                break;
//            default:
//                System.out.println("输入错误");
//                break;
//        }


//        int num = 3;
//        switch(num){
//            case num://case后面不可以是变量
//            System.out.println("1");
//            break;
//            default:
//                System.out.println("输入错误");
//                break;
//        }
        System.out.println("============case穿透============");
        /*************case穿透现象***********/
        int num = 8;
        switch(num){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        //default可以写在任意位置
        System.out.println("=======================");
        switch(num){
            default:
                System.out.println("输入错误");
                break;
            case 1:
                System.out.println("1");
                break;
            case 2:
                 System.out.println("1");
                 break;
            case 7:
                System.out.println("7");
                break;
        }
    }
    /**
     * 顺序语句
     * @param args
     */
    public static void main1(String[] args) {
        System.out.println("hello world");//hello world
        System.out.println("李华");//李华
        System.out.println(1 + 2);//3
    }
}
